/* ================================================================================
//	Crypteviant!
//	Providing tough encrypted P2P Chat
//	Copyright (C) 2010  Martin Pfeifer, Tobias Rausch
//
//	This program is free software: you can redistribute it and/or modify
//	it under the terms of the GNU General Public License as published by
//	the Free Software Foundation, either version 3 of the License, or
//	(at your option) any later version.
//
//	This program is distributed in the hope that it will be useful,
//	but WITHOUT ANY WARRANTY; without even the implied warranty of
//	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//	GNU General Public License for more details.
//
//	You should have received a copy of the GNU General Public License
//	along with this program.  If not, see <http://www.gnu.org/licenses/>.
// ============================================================================== */

#include "entropypooldata.hpp"


// Namespaces
using namespace RandomPool;
using namespace Hash;

EntropyPoolData::EntropyPoolData() :
    m_size(0)
{
    m_hash.reset();
}


void EntropyPoolData::addData(const QString data)
{
    QMutexLocker locker(&m_mutex);

    m_size += data.size(); // Update the cached size

    m_hash.update(data);

    locker.unlock();
    // Wake all waiting Threads and notify them about new data
    m_waitCond.wakeAll();
}


int EntropyPoolData::size()
{
    QMutexLocker locker(&m_mutex);
    Q_UNUSED(locker);

    return m_size; // Get the size
}


QString EntropyPoolData::getData()
{
    QMutexLocker locker(&m_mutex);
    Q_UNUSED(locker);

    // Generate the hash as QString
    QString hash = m_hash.hash();

    // Reset the internal state and clean up
    m_size = 0;

    return hash;
}


unsigned int EntropyPoolData::optimalBlockSize() const
{
    return m_hash.optimalBlockSize();
}


void EntropyPoolData::wait(int time)
{
    QMutexLocker locker(&m_mutex);
    m_waitCond.wait(&m_mutex, time);
}
